package com.wtf.dsp.admin.model.dto;

import com.baomidou.mybatisplus.annotation.DbType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

@Data
@ToString
@ApiModel("数据源修改请求类")
public class DsUpdateDTO {
    @ApiModelProperty(value = "命名空间")
    @Length(min = 0,max = 20,message = "请输入不超过20个字符")
    @Pattern(regexp = "^[-a-zA-Z0-9]+$",message = "请输入英文、数字、-的字符的命名空间")
    @NotBlank(message = "请输入命名空间")
    private String ns;

    @ApiModelProperty(value = "数据源")
    @Length(min = 0,max = 20,message = "请输入不超过20个字符")
    @Pattern(regexp = "^[-a-zA-Z0-9]+$",message = "请输入英文、数字、-的字符的数据源")
    @NotBlank(message = "请输入数据源")
    private String ds;

    @ApiModelProperty(value = "主机地址")
    @Length(min = 0,max = 20,message = "请输入不超过20个字符")
    private String host;

    @ApiModelProperty(value = "端口")
    @Min(value = 0,message = "端口不能小于0")
    private Integer port;

    @ApiModelProperty(value = "用户")
    @Length(min = 0,max = 50,message = "请输入不超过50个字符")
    private String username;

    @ApiModelProperty(value = "密码")
    @Length(min = 0,max = 50,message = "请输入不超过50个字符")
    private String password;

    @ApiModelProperty(value = "数据库")
    @Length(min = 0,max = 50,message = "请输入不超过50个字符")
    private String dbName;

    //客户端创建数据库连接等待超时时间，超时则抛出异常，默认30秒
    @ApiModelProperty(value = "创建连接等待时间")
    @Min(value = 250,message = "创建连接等待时间>=250ms")
    private Long connectionTimeout;
    //测试连接是否空闲的间隔时间，默认5秒
    @ApiModelProperty(value = "测试连接是否空闲的间隔时间")
    @Min(value = 250,message = "测试连接是否空闲的间隔时间>=250ms")
    private Long validationTimeout;
    //连接允许最长（空闲时间），超过该值则被强制断开（关闭），默认600000（10分钟）
    @ApiModelProperty(value = "连接允许最长空闲时间")
    @Min(value = 10000,message = "连接允许最长空闲时间>=10000ms")
    private Long idleTimeout;
    //检测连接泄露的阈值，超过该时间则日志警告，默认为0（禁用）[连接被占用的超时时间，超过1分钟客户端没有释放连接则强制回收该连接，防止泄露]
    @ApiModelProperty(value = "检测连接泄露的阈值")
    @Min(value = 0,message = "检测连接泄露的阈值>=0")
    private Long leakDetectionThreshold;
    //连接最长生命周期时间，当连接存活时间超过设置值之后会被关闭退休处理，默认1800000（30分钟）
    @ApiModelProperty(value = "连接最长生命周期时间")
    @Min(value = 30000,message = "连接最长生命周期时间至少30000ms")
    private Long maxLifetime;
    //连接池最大连接数量，默认10g个
    @ApiModelProperty(value = "最大连接数")
    @Min(value = 1,message = "最大连接数至少1个")
    private Integer maxPoolSize;
    @ApiModelProperty(value = "最小空闲连接数")
    @Min(value = 1,message = "最小空闲连接数至少1个")
    //连接池最小空闲连接数量，默认10个
    private Integer minIdle;
    //连接测试查询语句
    @ApiModelProperty(value = "连接测试SQL")
    private String connectionTestQuery;

}
